using System;
using JGSY.CMS.LowCode.Platform.Domain.Interfaces;

namespace JGSY.CMS.LowCode.Platform.Domain.Entities
{
    /// <summary>
    /// 登录历史记录实体
    /// 用于记录用户登录活动和安全分析数据
    /// </summary>
    public class LoginHistory : ITenantEntity
    {
        /// <summary>
        /// 登录历史记录标识符
        /// </summary>
        public long Id { get; set; }
        
        /// <summary>
        /// 用户标识符
        /// 执行登录的用户ID
        /// </summary>
        public long UserId { get; set; }
        
        /// <summary>
        /// 用户信息
        /// 导航属性，指向执行登录的用户
        /// </summary>
        public User? User { get; set; }
        
        /// <summary>
        /// IP地址
        /// 用户登录时使用的网络IP地址
        /// </summary>
        public string IpAddress { get; set; } = string.Empty;
        
        /// <summary>
        /// 用户代理
        /// 浏览器或客户端的User-Agent信息
        /// </summary>
        public string UserAgent { get; set; } = string.Empty;
        
        /// <summary>
        /// 设备信息
        /// 登录设备的详细信息
        /// </summary>
        public string? DeviceInfo { get; set; }
        
        /// <summary>
        /// 地理位置
        /// 根据IP地址解析出的地理位置信息
        /// </summary>
        public string? Location { get; set; }
        
        /// <summary>
        /// 登录状态
        /// 登录尝试的结果状态，如成功、失败等
        /// </summary>
        public string Status { get; set; } = string.Empty;
        
        /// <summary>
        /// 失败原因
        /// 登录失败时的具体原因说明
        /// </summary>
        public string? Reason { get; set; }
        
        /// <summary>
        /// 会话标识符
        /// 成功登录后生成的会话ID
        /// </summary>
        public string? SessionId { get; set; }
        
        /// <summary>
        /// 是否异常
        /// 标识该登录行为是否被识别为异常
        /// </summary>
        public bool IsAnomaly { get; set; } = false;
        
        /// <summary>
        /// 风险评分
        /// 基于行为分析的风险评分，0-100分
        /// </summary>
        public int RiskScore { get; set; } = 0;
        
        /// <summary>
        /// 创建时间
        /// 登录记录的创建时间戳
        /// </summary>
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// 租户标识符
        /// </summary>
        public string TenantId { get; set; } = string.Empty;
    }
}
